\documentclass[11pt]{ctexart}
\usepackage{graphicx}
\usepackage{ctex}
\usepackage[a4paper,left=1.25in,right=1.25in,top=1in,bottom=1in]{geometry}

\title{作业报告}
\author{刘小川  \\ 学号 3210105317}

\begin{document}
\maketitle
\section{数据结构关系}
\begin{enumerate}
\item
从数据结构的定义出发，数据结构是带有结构特性的数据元素的集合，他们的共同点是数据元素见都有
一定的关系，而不同点体现在他们关系关联的方式不同。其中一种分类是对其逻辑结构的分类，在每个节点
后只有一个数据元素连接，则成为线性结构，而有多个节点相连，则称为非线性结构。同时，他们的共同点是都有一定
的存储结构，如顺序存储，其存储地址是连续的，代表就是数组;还有如链式存储，其存储地址不是连续的。\par
\item
在相近的数据结构中，其结构有相同的地方，也有其不同的地方。据此来写数据结构，在写类模板是，应该囊括所有
的共同点，规避其结构不同之处。其如单链列表和双链列表，其有一个共同类是Node，其包含元素都只有一个，区别在于其指向
其他节点地址的个数不同。在成员函数中，其共有insert和remove两个函数共有，所以可以构造一个共同类，其中就包含这两个函数。
在声明单链列表和双链列表是，可以继承这些函数，进而在去声明其他成员函数。

\end{enumerate}

\section{设计思路}
\begin{itemize}
\item
在设计binarytree时，需要考虑的包括共同的成员函数以及Node类中公有的成员。 
\item
binarytree函数的公共成员函数包括insert,remove,printtree,findMax,findMin,\par isEmpty,makeEmpty等
函数，其中在声明函数前要加入virtual，来表示这些是虚函数，一边在后续类的编写中能够有多态性。其私有类的
共有的函数包括printtree和clone函数。bingary类函数还需要声明一个binarynode节点类。
其中inset函数在avltree中多出了一个balance操作，根据不同情况进行了左旋和右旋操作。
avlTree中的其他操作都同样，在各种操作结束后都有个balance操作。而BinarySearchTree中insert操作
每回操作是保证了左子树的每个元素都小于右子树的每个元素。
\item
在binarynode类的编写中，我确定了该Node类中私有的三个对象，为元素，左支和右支。在私有类三个对象声明完后，
我就没有在声明构造函数，因为Avltree中的构造节点是所用的参数为四个，并且其对象height并没有在之前声明。
{
\centering\includegraphics[width=1.1\textwidth]{new.png}

}\par
\end{itemize}
\end{document}
